package motor;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.swing.JProgressBar;

import dominio.Cliente;
import dominio.Usuario;
import excepcion.StringNumericoTieneLetra;
import excepcion.StringSin8Caracteres;
import excepcion.StringTieneNumero;
import excepcion.StringVacio;
import file.Archivo;
import basededatos.ConexionBD;

public class HiloMigracionClientes extends Thread{
	
	private static int DELAY = 100;
	private JProgressBar barraProgreso;
	
	public HiloMigracionClientes(JProgressBar bp){
		barraProgreso = bp;
	}
	
	
	public void run(){
		
		ConexionBD conexion = new ConexionBD(); //creo objeto conexion
		Archivo archivo = new Archivo("Clientes.dat"); //creo objeto archivo con la ruta
		
		archivo.limpiarArchivo(); //limpio el archivo
		conexion.Abrir(); //abro conexion
		ResultSet rs = conexion.RealizarConsulta("call ClientesListar2"); //lleno un resulset con la consulta del listado clientes
		int cantRegistros = ContarRegistrosResultSet(rs); //cuento la cantidad de registros para luego usarlo en el progress bar
		
		
		try {
			
			while(rs.next())
			{
				Cliente cliente = new Cliente();
				cliente.setDni(rs.getString(1));
				cliente.setNombre(rs.getString(2));
				cliente.setApellido(rs.getString(3));
				cliente.setTelefono(rs.getString(4));
				cliente.setEmail(rs.getString(5));
				cliente.setCantViajes(rs.getInt(6));
				Usuario cuenta = new Usuario();
				cuenta.setPass(rs.getString(7));
				cuenta.setTipo(rs.getString(8));
				cliente.setCuenta(cuenta);
				
				archivo.AgregarRegistro(cliente); //agrego registro al archivo
				Thread.sleep(DELAY); //pausa delay para ver mas lento el progreso
				barraProgreso.setValue(barraProgreso.getValue() + (barraProgreso.getMaximum()/cantRegistros)); //seteo la barra de progreso de acuerdo a loq ue va agregando y a la cantidad de registro hasta que llegue a su maximo valor (generalmente 100%) 
				

			}
			
			barraProgreso.setValue(barraProgreso.getMaximum()); //como termino el agregado seteo al maximo valor la barra de progreso

		}catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		catch(StringVacio e){
			e.printStackTrace();
		}
		catch(StringNumericoTieneLetra e){
			e.printStackTrace();
		}
		catch(StringSin8Caracteres e){
			e.printStackTrace();
		}
		catch (InterruptedException e) {
			e.printStackTrace();
	    }
		catch(StringTieneNumero e){
			e.printStackTrace();
		}
		finally
		{
			conexion.Cerrar();
		}
		
	
	}
	
	
	//cuentaregistros de un resultset recibido
	public int ContarRegistrosResultSet(ResultSet rs){
		
		int contador = 0;
		boolean b;
		
		try {
			
			b = rs.last();
			if(b)
				contador = rs.getRow();
			
			rs.first();
		}
         catch (SQLException e1) {
 			e1.printStackTrace();
 		}
		
		return contador;
	}
	
}
